package com.java2007.service.impl;

import com.alibaba.druid.util.StringUtils;
import com.java2007.dao.TableDao;
import com.java2007.factory.BeanFactory;
import com.java2007.pojo.Table;
import com.java2007.service.TableService;
import com.java2007.util.DateUtil;
import com.java2007.util.JdbcUtil;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;

/**
 * 餐桌业务实现层
 */
public class TableServiceImpl implements TableService {
    private TableDao tableDao = (TableDao) BeanFactory.getBean("com.java2007.dao.impl.TableDaoImpl");
    /**
     * 查询所有餐桌
     * @return
     */
    @Override
    public List<Table> findAll() throws SQLException {
        List<Table> lists =  tableDao.selectAll();
        return lists;
    }

    /**
     * 通过餐桌名字查询
     * @param keyword
     * @return
     */
    @Override
    public List<Table> selectByTableName(String keyword) throws SQLException {
        //保证传入的数据不是空
        if(StringUtils.isEmpty(keyword)){
            keyword="";
        }else {
            //trim 去掉字符串两边的空格
            keyword=keyword.trim();
        }
        List<Table> lists = tableDao.findByTableName("%"+keyword+"%");
        return lists;
    }

    /**
     * 增加餐桌
     * @param table
     * @return
     */
    @Override
    public int addTable(Table table) {
        //获取适配数据库的Date格式 将Date转换成字符串
        String dateToStr = DateUtil.dateToStr(new Date(), "yyyy-MM-dd-HH-mm-ss");
        //将字符串转换成Date
        Date date = DateUtil.strToDate(dateToStr, "yyyy-MM-dd-HH-mm-ss");
        table.setTableCreateTime(date);
        table.setTableUpdateTime(date);

        try {
            //开启事务
            JdbcUtil.begin();
            tableDao.insertTable(table);
            //提交事务
            JdbcUtil.commit();
        } catch (SQLException e) {
            e.printStackTrace();
            //回滚事务
            JdbcUtil.rollback();
            return 0;
        }
        return 1;
    }

    /**
     * 预定/退桌
     * @param table
     * @return
     */
    @Override
    public int updateByTableId(Table table) {
         // 开启事务
        JdbcUtil.begin();
        try {
            //status=1 则是退桌
            if (1==table.getTableStatus()){
                table.setReserveTime(null);
                table.setTableStatus(0);
                tableDao.updateById(table);
            }else if (0==table.getTableStatus()){
                //0 则是预定
                Date date = new Date();
                table.setReserveTime(date);
                table.setTableStatus(1);
                tableDao.updateById(table);

            }
            //提交事务
            JdbcUtil.commit();
        } catch (SQLException e) {
            e.printStackTrace();
            //回滚事务
            JdbcUtil.rollback();
            return 0;
        }
        return 1;
    }

    /**
     * 通过tableId查询
     * @param tableId
     * @return
     */
    @Override
    public Table selectByTableId(Integer tableId) throws SQLException {
        Table byTableId = tableDao.findByTableId(tableId);
        return byTableId;
    }

    /**
     * 根据tableId删除
     * @param tableId
     * @return
     */
    @Override
    public int deleteByTableId(Integer tableId) {
        try {
            //开启事务
            JdbcUtil.begin();
            tableDao.deleteById(tableId);
            //提交事务
            JdbcUtil.commit();
        } catch (SQLException e) {
            e.printStackTrace();
            //回滚事务
            JdbcUtil.rollback();
            return 0;
        }
        return 1;
    }

    @Override
    public List<Table> queryAlliDle() throws SQLException {

        return tableDao.findByTableStatus();
    }
}
